/**
 * 项目名称（软件名称）：忠旺机械物资管理系统(mms)
 * 研发设计单位：忠旺机械设备制造有限公司机械设计院智能控制设计科设计与研发。
 * 版权所有：忠旺机械设备制造有限公司
 * 注：本项目的一切技术专利，使用规范归解释权由忠旺机械设备制造有限公司所有。
 * 软件版本：Ver 1.0.0
 * 文件路径：com.zhongwang.mms.module.purchase.excelListener
 * 创建时间：2020年04月28日 12时56分
 **/
package com.zhongwang.mms.module.half.model;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zhongwang.mms.common.ImportCallBack;
import com.zhongwang.mms.module.half.dao.InventoryCheckDao;
import com.zhongwang.mms.module.purchase.dao.PurCheckDao;
import com.zhongwang.mms.module.purchase.model.check.PCheckDetailExcelModel;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName： PCheckDetailListener
 * @Description： 盘点结果导入 Listenter
 * @Author： 徐一贺
 * @Date： 2020/4/28 12:56
 * @Version： V1.0
 **/
public class HCheckDetailListener extends AnalysisEventListener<PCheckDetailExcelModel> {
    private InventoryCheckDao inventoryCheckDao;
    private ImportCallBack callBack;
    private PurCheckDao purCheckDao;
    private List<PCheckDetailExcelModel> pCheckDetailExcelModels = new ArrayList<>();


    public HCheckDetailListener(
                                PurCheckDao purCheckDao,
                                InventoryCheckDao inventoryCheckDao,
                                ImportCallBack callBack
    ) {
        this.purCheckDao = purCheckDao;
        this.inventoryCheckDao = inventoryCheckDao;
        this.callBack = callBack;

    }

    @Override
    public void invoke(PCheckDetailExcelModel data, AnalysisContext analysisContext) {
        if (data.getCdlId() == null ||
                (data.getCdlPosition() == null || data.getCdlPosition().trim().equals("")) ||
                (data.getCdlMatDesc() == null || data.getCdlMatDesc().trim().equals("")) ||
                (data.getCdlMatCode() == null || data.getCdlMatCode().trim().equals("")) ||
                (data.getCdlProCode() == null || data.getCdlProCode().trim().equals("") || purCheckDao.getProjectByCode(data.getCdlProCode()) == null) ||
                (data.getCdlItyNum() == null || data.getCdlItyNum() < 0 || data.getCdlItyNum() >= 2147483647) ||
                (data.getCdlUnit() == null || data.getCdlUnit().trim().equals("")) ||
                (data.getCdlNum() == null || data.getCdlNum() < 0 || data.getCdlNum() >= 2147483647)
        ) {
            pCheckDetailExcelModels.add(data);
            return;
        }
        if (data.getCdlNum().equals(0)) {
            data.setCdlIsNewFlag(1);
        } else {
            data.setCdlIsNewFlag(0);
        }
        data.setCdlStatus(2);
        if (data.getCdlNum() > data.getCdlItyNum()) {
            data.setCdlCheckStatus(1);
        } else if (data.getCdlNum() < data.getCdlItyNum()) {
            data.setCdlCheckStatus(2);
        }
        data.setCdlPalVal(data.getCdlNum() - data.getCdlItyNum());
        inventoryCheckDao.updateHCheckDetailCdlNumAndCdlStatus(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        if (pCheckDetailExcelModels.size() > 0) {
            callBack.onWarning(pCheckDetailExcelModels);
        } else {
            callBack.onSuccess();
        }
    }


    @Override
    public void onException(Exception exception, AnalysisContext context) {

    }
}